package com.kafka.service.carMsg.impl;


import com.kafka.service.carMsg.CarObserver;
import com.kafka.service.carMsg.MsgObserver;

import java.util.HashSet;
import java.util.Set;


/**
 * 被观察者，也就是车端消息上传
 * 实现了Observerable接口，对Observerable接口的三个方法进行了具体实现
 * @author jstao
 *
 */
public class CarMsgServer implements CarObserver {


    //注意到这个List集合的泛型参数为Observer接口，设计原则：面向接口编程而不是面向实现编程
    private Set<MsgObserver> set;
    private String message;

    public CarMsgServer() {
        set = new HashSet<MsgObserver>();
    }

    @Override
    public void registerObserver(MsgObserver o) {
        set.add(o);
    }

    @Override
    public void removeObserver(MsgObserver o) {
        if(!set.isEmpty())
            set.remove(o);
    }

    //遍历
    @Override
    public void notifyObserver() {
        for (MsgObserver oserver : set) {
            oserver.send(message);
        }
    }

    public void setInfomation(String s) {
        this.message = s;
        System.out.println("车端更新消息： " + s);
        //消息更新，通知所有观察者
        notifyObserver();
    }
}
